package com.rcoming.activity;

import android.app.Activity;
import android.content.Intent;
import android.content.res.Configuration;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.os.SystemClock;
import android.support.v7.app.AppCompatActivity;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;

import com.afollestad.materialcamera.MaterialCamera;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.lzy.imagepicker.ImagePicker;
import com.lzy.imagepicker.loader.ImageLoader;
import com.lzy.imagepicker.ui.ImageGridActivity;
import com.lzy.imagepicker.view.CropImageView;
import com.rcoming.R;
import com.shuyu.gsyvideoplayer.GSYVideoManager;
import com.shuyu.gsyvideoplayer.utils.GSYVideoType;
import com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer;
import com.shuyu.gsyvideoplayer.video.base.GSYVideoPlayer;

import java.io.File;

import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;

public class PlayerActivity extends AppCompatActivity {

    @BindView(R.id.video_player)
    StandardGSYVideoPlayer videoPlayer;
    @BindView(R.id.btn1)
    Button btn1;
    @BindView(R.id.btn2)
    Button btn2;
    @BindView(R.id.btn3)
    Button btn3;
    @BindView(R.id.btn4)
    Button btn4;
    @BindView(R.id.btn5)
    Button btn5;
    @BindView(R.id.btn6)
    Button btn6;
    @BindView(R.id.btn7)
    Button btn7;

    private MaterialCamera materialCamera;
    final String VIDEO_URL = "http://baobab.wdjcdn.com/14564977406580.mp4";
    private final int IMAGE_PICKER = 100;
    private final int CAMERA_RQ = 6969;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_player);
        ButterKnife.bind(this);
        initImagePicker();
        initMaterialCamera();
        playVideo();
        startAsyncTask();
    }

    /**
     * 视频播放
     */
    public void playVideo() {

        //设置播放url，第一个url，第二个开始缓存，第三个使用默认缓存路径，第四个设置title
        GSYVideoType.setShowType(GSYVideoType.SCREEN_TYPE_FULL);
        videoPlayer.setUp(VIDEO_URL, false, null, "奥斯卡获奖电影简介");
        //        GSYVideoManager.instance().setTimeOut(4000, true);
        //GSYVideoManager.instance().setVideoType(MainActivity.this, GSYVideoType.SCREEN_TYPE_FULL);
        //非全屏下，不显示title
        videoPlayer.getTitleTextView().setVisibility(View.GONE);
        //非全屏下不显示返回键
        videoPlayer.getBackButton().setVisibility(View.GONE);
        //打开非全屏下触摸效果
        videoPlayer.setIsTouchWiget(false);
        //立即播放
        //videoPlayer.startPlayLogic();
        //开启自动旋转
        videoPlayer.setRotateViewAuto(false);
        //全屏首先横屏
        videoPlayer.setLockLand(true);
        //是否需要全屏动画效果
        videoPlayer.setShowFullAnimation(false);


        //增加封面
        ImageView imageView = new ImageView(this);
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        imageView.setImageResource(R.mipmap.ask);
        videoPlayer.setThumbImageView(imageView);
        //外部辅助的旋转，帮助全屏
        //orientationUtils = new OrientationUtils(this, videoPlayer);

        videoPlayer.getFullscreenButton().setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //第一个true是否需要隐藏actionbar，第二个true是否需要隐藏statusbar
                videoPlayer.startWindowFullscreen(PlayerActivity.this, true, true);
            }
        });

    }

    @Override
    protected void onStart() {
        super.onStart();
    }

    @Override
    protected void onResume() {
        super.onResume();
        GSYVideoManager.onResume();
    }

    @Override
    protected void onPause() {
        super.onPause();
        GSYVideoManager.onPause();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        GSYVideoPlayer.releaseAllVideos();
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);

    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {

        return super.onKeyDown(keyCode, event);
    }

    @Override
    public void onBackPressed() {
        if (StandardGSYVideoPlayer.backFromWindowFull(this)) {
            return;
        }
        super.onBackPressed();
    }

    // 初始化ImagePicker
    private void initImagePicker() {
        ImagePicker imagePicker = ImagePicker.getInstance();
        imagePicker.setImageLoader(new PlayerActivity.GlideImageLoader());   //设置图片加载器
        imagePicker.setMultiMode(false);
        imagePicker.setShowCamera(true);  //显示拍照按钮
        imagePicker.setCrop(true);        //允许裁剪（单选才有效）
        imagePicker.setSaveRectangle(true); //是否按矩形区域保存
        //imagePicker.setSelectLimit(9);    //选中数量限制
        imagePicker.setStyle(CropImageView.Style.RECTANGLE);  //裁剪框的形状
        imagePicker.setFocusWidth(800);   //裁剪框的宽度。单位像素（圆形自动取宽高最小值）
        imagePicker.setFocusHeight(800);  //裁剪框的高度。单位像素（圆形自动取宽高最小值）
        imagePicker.setOutPutX(1000);//保存文件的宽度。单位像素
        imagePicker.setOutPutY(1000);//保存文件的高度。单位像素
    }

    @OnClick({R.id.btn1, R.id.btn2, R.id.btn3, R.id.btn4, R.id.btn5, R.id.btn6, R.id.btn7})
    public void onViewClicked(View view) {
        switch (view.getId()) {
            case R.id.btn1:
                Intent intent = new Intent(this, ImageGridActivity.class);
                startActivityForResult(intent, IMAGE_PICKER);
                break;
            case R.id.btn2:

                materialCamera.start(CAMERA_RQ);
                break;

            case R.id.btn3:

                Toast.makeText(this, "未开发", Toast.LENGTH_SHORT).show();

                break;

            case R.id.btn4:
//                Intent intent2 = new Intent(this, UnityPlayerActivity.class);
//                startActivity(intent2);
                break;
            case R.id.btn5:
                Toast.makeText(this, "未开发", Toast.LENGTH_SHORT).show();
                break;
            case R.id.btn6:

                break;
            case R.id.btn7:
                Toast.makeText(this, "未开发", Toast.LENGTH_SHORT).show();
                break;
        }
    }


    //测试内存泄漏
    private void startAsyncTask() {
        // 这个AsyncTask是一个匿名内部类，因此他隐式的持有一个外部类
        // 的对象，也就是MainActivity。如果MainActivity在AsyncTask
        // 执行完成前就销毁了，这个activity实例就发生了泄露。
        new AsyncTask<Void, Void, Void>() {
            @Override
            protected Void doInBackground(Void... params) {
                SystemClock.sleep(20000); // 休眠20秒
                return null;
            }
        }.execute();
    }

    /*@NeedsPermission({Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE})
    void openCamera() {
    }

    *//*@Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        MainActivityPermissionsDispatcher.onRequestPermissionsResult(this, requestCode, grantResults);
    }*//*


    void cameraOnShow(final PermissionRequest request) {
    }

    @OnPermissionDenied({Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE})
    void cameraDenied() {
    }

    @OnNeverAskAgain({Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE})
    void cameraNeverAsk() {
    }*/


    public class GlideImageLoader implements ImageLoader {

        @Override
        public void displayImage(Activity activity, String path, ImageView imageView, int width, int height) {

            Glide
                    .with(activity)
                    .load(Uri.fromFile(new File(path)))
                    .error(R.mipmap.logo)
                    .placeholder(R.mipmap.logo)
                    .diskCacheStrategy(DiskCacheStrategy.ALL)
                    .into(imageView);

        }

        @Override
        public void displayImagePreview(Activity activity, String path, ImageView imageView, int width, int height) {
            Glide
                    .with(activity)
                    .load(Uri.fromFile(new File(path)))
                    .error(R.mipmap.logo)
                    .placeholder(R.mipmap.logo)
                    .diskCacheStrategy(DiskCacheStrategy.ALL)
                    .into(imageView);
        }

        @Override
        public void clearMemoryCache() {
            //这里是清除缓存的方法,根据需要自己实现
        }
    }

    private void initMaterialCamera() {
        File saveDir = null;
        saveDir = new File(Environment.getExternalStorageDirectory(), "MaterialCamera");
        saveDir.mkdirs();
        materialCamera = new MaterialCamera(this);
        materialCamera
                .allowRetry(false)                        //是否显示重拍按钮
                .autoSubmit(false)                        //是否允许用户在录制后播放视频
                .saveDir(saveDir)                    //拍摄的内容的储存地址
                .primaryColorAttr(R.attr.colorPrimary)  //相机配色，建议遵从app style
                .showPortraitWarning(true)               //如果用户按纵向方向的记录，是否显示警告
                .defaultToFrontFacing(false)            //是否默认为前置摄像头
                .retryExits(true)                         //如果为true，播放屏幕中的“重试”按钮将退出相机，而不是返回录像，并且播放界面按返回也会直接退出相机
                .restartTimerOnRetry(false)                //如果为true，则当用户在播放中轻按“重试”时，倒计时器将重置为0
                .continueTimerInPlayback(false)         //如果为true，倒计时器将在播放过程中继续向下，而不是暂停。
                .videoEncodingBitRate(1024000)          //设置视频大小
                .audioEncodingBitRate(50000)            // 设置音频大小
                .videoFrameRate(24)                     //设置视频fps值
                .qualityProfile(MaterialCamera.QUALITY_HIGH)//设置质量配置文件，手动设置比特率或帧速率与其他设置将覆盖单个质量配置文件设置
                .videoPreferredHeight(720)                //设置录制视频的首选高度
                .videoPreferredAspect(4f / 3f)            //为录制的视频输出设置首选宽高比
                .maxAllowedFileSize(1024 * 1024 * 20)    //将最大文件大小设置为5MB，如果文件达到此限制，录制将停止。请记住，FAT文件系统的文件大小限制为4GB。
                .iconRecord(R.drawable.mcam_action_capture)//设置用于开始录制的按钮的自定义图标
                .iconStop(R.drawable.mcam_action_stop)  //为用于停止录制的按钮设置自定义图标
                .iconFrontCamera(R.drawable.mcam_camera_front)//设置用于切换到前置摄像头的按钮的自定义图标
                .iconRearCamera(R.drawable.mcam_camera_rear)//设置用于切换到后置摄像头的按钮的自定义图标
                .iconPlay(R.drawable.evp_action_play)   //设置用于开始播放的自定义图标
                .iconPause(R.drawable.evp_action_pause) // 设置用于暂停播放的自定义图标
                .iconRestart(R.drawable.evp_action_restart)//设置用于重新开始播放的自定义图标
                .labelRetry(R.string.video_retry)        //为用于重试记录的按钮设置自定义按钮标签（如果可用）
                .labelConfirm(R.string.video_ok)  //为用于确认/提交录音的按钮设置自定义按钮标签
                .autoRecordWithDelaySec(3)                 //摄像机将在5秒倒计时后自动开始录制。这将最初禁用前后摄像头之间的切换。
                //.autoRecordWithDelayMs(5000)            //与上面相同，用毫秒而不是秒表示。
                .audioDisabled(false);                   //设置为true可记录没有任何音频的视频
    }

    private void testPermisson() {
        Toast.makeText(this, "权限成功", Toast.LENGTH_SHORT).show();
    }


}
